pthread.h এবং POSIX Thread Library এর প্রয়োগ

Computer Programming - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference) Multithreading এবং Concurrency (মাল্টিথ্রেডিং এবং কনকারেন্সি) |
214
214

pthread.h এবং POSIX Thread Library এর প্রয়োগ

pthread.h হেডার ফাইলটি সি প্রোগ্রামিং ভাষায় POSIX থ্রেড লাইব্রেরি (Portable Operating System Interface Threads Library) ব্যবহারের জন্য ব্যবহৃত হয়। POSIX থ্রেড লাইব্রেরি সি প্রোগ্রামিংয়ে মাল্টিথ্রেডিং কার্যকারিতা যোগ করার একটি স্ট্যান্ডার্ড উপায়। মাল্টিথ্রেডিং এমন একটি কৌশল, যার মাধ্যমে প্রোগ্রাম একাধিক অংশে বিভক্ত হয়ে সমান্তরালভাবে কাজ করতে পারে, যা সিপিইউর কার্যক্ষমতা এবং প্রোগ্রামের কর্মদক্ষতা বৃদ্ধি করে।


POSIX থ্রেড লাইব্রেরি (Pthreads) এর প্রয়োজনীয়তা

১. সমান্তরাল প্রক্রিয়াকরণ: একাধিক কাজ সমান্তরালে চালাতে থ্রেড ব্যবহার করা হয়, যা প্রোগ্রামের পারফরম্যান্স বৃদ্ধি করে।
২. CPU রিসোর্সের সর্বোচ্চ ব্যবহার: মাল্টিপ্রসেসর সিস্টেমে বিভিন্ন থ্রেড আলাদা আলাদা কোরে চলতে পারে, যা CPU-এর রিসোর্সের সর্বোচ্চ ব্যবহার নিশ্চিত করে।
৩. প্রোগ্রামের প্রতিক্রিয়াশীলতা বৃদ্ধি: মাল্টিথ্রেডিংয়ের মাধ্যমে প্রোগ্রাম আরও দ্রুত এবং প্রতিক্রিয়াশীল হয়, কারণ থ্রেডগুলো সমান্তরালে কাজ করতে পারে।
৪. ডেটা শেয়ারিং: একাধিক থ্রেড সহজেই একে অপরের ডেটা শেয়ার এবং অ্যাক্সেস করতে পারে, যা মাল্টিপ্রসেসিংয়ের তুলনায় আরও কার্যকর।


pthread.h এর গুরুত্বপূর্ণ ফাংশনসমূহ

pthread.h হেডার ফাইলে কিছু গুরুত্বপূর্ণ ফাংশন রয়েছে যা থ্রেড তৈরি, থ্রেড পরিচালনা, এবং থ্রেড সিঙ্ক্রোনাইজেশন করতে ব্যবহৃত হয়। নিচে তাদের ব্যাখ্যা দেওয়া হলো।

১. pthread_create() – থ্রেড তৈরি করা

pthread_create() ফাংশনটি একটি নতুন থ্রেড তৈরি করতে ব্যবহৃত হয় এবং এটি সফলভাবে তৈরি হলে থ্রেডের ID রিটার্ন করে।

সিঙ্কট্যাক্স:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
  • thread: থ্রেড আইডি সঞ্চয় করতে পয়েন্টার।
  • attr: থ্রেডের বৈশিষ্ট্য নির্ধারণ করতে ব্যবহৃত (NULL হলে ডিফল্ট বৈশিষ্ট্য)।
  • start_routine: থ্রেডের মেইন ফাংশন বা কাজের ফাংশনের পয়েন্টার।
  • arg: থ্রেডের মেইন ফাংশনে পাস করা আর্গুমেন্ট।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *print_message(void *message) {
    printf("%s\n", (char *)message);
    return NULL;
}

int main() {
    pthread_t thread;
    const char *message = "Hello, Thread!";

    // থ্রেড তৈরি
    if (pthread_create(&thread, NULL, print_message, (void *)message)) {
        fprintf(stderr, "Error creating thread\n");
        return 1;
    }

    // থ্রেডের সমাপ্তির জন্য অপেক্ষা
    pthread_join(thread, NULL);
    return 0;
}

২. pthread_join() – থ্রেড সমাপ্তির জন্য অপেক্ষা করা

pthread_join() ফাংশনটি একটি নির্দিষ্ট থ্রেড শেষ হওয়া পর্যন্ত অপেক্ষা করতে ব্যবহৃত হয়। এটি থ্রেড সিঙ্ক্রোনাইজেশনের জন্য গুরুত্বপূর্ণ।

সিঙ্কট্যাক্স:

int pthread_join(pthread_t thread, void **retval);
  • thread: যে থ্রেডটির জন্য অপেক্ষা করতে হবে তার ID।
  • retval: থ্রেডের রিটার্ন মান সঞ্চয় করার জন্য পয়েন্টার।

৩. pthread_exit() – থ্রেড শেষ করা

pthread_exit() ফাংশনটি একটি থ্রেডের কার্যকলাপ শেষ করতে ব্যবহৃত হয়। এটি অন্য থ্রেডের কার্যক্রমে কোনো ব্যাঘাত না ঘটিয়ে বর্তমান থ্রেড শেষ করে।

সিঙ্কট্যাক্স:

void pthread_exit(void *retval);
  • retval: থ্রেডের রিটার্ন মান।

উদাহরণ:

void *my_thread(void *arg) {
    printf("Thread is running\n");
    pthread_exit(NULL);  // থ্রেড শেষ করা
}

৪. pthread_mutex_t – মিউটেক্স লক

মাল্টিথ্রেডিংয়ের সময় ডেটা রেস বা একাধিক থ্রেড একই ডেটা অ্যাক্সেস করলে সমস্যা দেখা দিতে পারে। এই সমস্যা সমাধানে মিউটেক্স লক (Mutex Lock) ব্যবহার করা হয়, যা একটি নির্দিষ্ট সময়ে একাধিক থ্রেডের একই ডেটা অ্যাক্সেস করা বন্ধ করে।

মিউটেক্স ব্যবহারের ফাংশনসমূহ:

  • pthread_mutex_init() – মিউটেক্স লক আরম্ভ করা।
  • pthread_mutex_lock() – মিউটেক্স লক করা।
  • pthread_mutex_unlock() – মিউটেক্স আনলক করা।
  • pthread_mutex_destroy() – মিউটেক্স লক ধ্বংস করা।

উদাহরণ:

#include <stdio.h>
#include <pthread.h>

pthread_mutex_t lock;  // মিউটেক্স লক ডিক্লেয়ার

void *increment_counter(void *arg) {
    pthread_mutex_lock(&lock);  // লক করা
    int *counter = (int *)arg;
    (*counter)++;
    printf("Counter: %d\n", *counter);
    pthread_mutex_unlock(&lock);  // আনলক করা
    return NULL;
}

int main() {
    pthread_t thread1, thread2;
    int counter = 0;

    pthread_mutex_init(&lock, NULL);  // মিউটেক্স আরম্ভ করা

    pthread_create(&thread1, NULL, increment_counter, &counter);
    pthread_create(&thread2, NULL, increment_counter, &counter);

    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    pthread_mutex_destroy(&lock);  // মিউটেক্স ধ্বংস করা

    return 0;
}

POSIX থ্রেড লাইব্রেরির অন্যান্য ফাংশন

ফাংশনকাজ
pthread_self()বর্তমান থ্রেডের ID রিটার্ন করে।
pthread_equal()দুটি থ্রেডের ID সমান কিনা তা যাচাই করে।
pthread_cancel()একটি থ্রেড বাতিল করতে ব্যবহৃত হয়।
pthread_detach()থ্রেডকে পৃথক বা detached করার জন্য ব্যবহৃত হয়।
pthread_attr_init()থ্রেড অ্যাট্রিবিউট আরম্ভ করার জন্য ব্যবহৃত হয়।

সারসংক্ষেপ

POSIX থ্রেড লাইব্রেরি মাল্টিথ্রেডেড প্রোগ্রামিংয়ের জন্য সি প্রোগ্রামিংয়ে একটি মানসম্মত উপায় সরবরাহ করে। pthread.h হেডার ফাইলটি ব্যবহার করে মাল্টিথ্রেডেড প্রোগ্রাম তৈরি করা যায়, যা কর্মদক্ষতা বৃদ্ধি এবং CPU রিসোর্সের সর্বোত্তম ব্যবহার নিশ্চিত করে।

Pthreads লাইব্রেরির মাধ্যমে থ্রেড তৈরি, থ্রেডের মধ্যে সমন্বয় এবং সিঙ্ক্রোনাইজেশন সহজেই করা সম্ভব, যা জটিল প্রোগ্রামিং পরিবেশে কর্মক্ষমতা উন্নত করতে সহায়ক।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion